package mx.unam.ia.algoritmos;

import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author Juan Fco. Navarrete
 */

//Se asignan los terminales
public enum Terminal
{
    X("X"),
    R("R");

    private String simbolo;

    //Se relacionan los valores de los terminales.
    private static final Map<String,Terminal> map = new HashMap<String,Terminal>();

    static
    {
        for (Terminal terminal : Terminal.values())
        {
            map.put(terminal.getSimbolo(), terminal);
        }
    }

    private Terminal(String simbolo)
    {
        this.simbolo = simbolo;
    }

    public String getSimbolo() //Se obtiene el simbolo
    {
        return simbolo;
    }

    public static double reemplaza(String simbolo, double x, double r) //Reemplaza el simnolo, ya sea X o R
    {
        if(simbolo.equals("X"))
        {
            return x;
        }
        else if(simbolo.equals("R"))
        {
            return r;
        }
        else
        {
            throw new UnsupportedOperationException("El simbolo terminal " + simbolo + " no está definido");
        }
    }

    public static boolean esTerminal(String simbolo) //Indica si se refiere a un terminal
    {
        return map.containsKey(simbolo);
    }

    public static String obtenerTerminal()  //Obtiene el valor de los terminales.
    {
        Terminal[] terminales = Terminal.values();
        int aleatorio = (int)(Math.random() * terminales.length);
        return terminales[aleatorio].getSimbolo();
    }
}
